package com.shujia.wyh.day11.ketang;

/*
        问题：当子类中的变量与父类中的变量重名的时候，我们不仅要输出子类中的变量num2对应的值，
            还想输出父类中的变量num2对应的值，怎么办？

        如果有一个东西，和this相似，可以直接访问父类的数据就好了。
        java替我们考虑到了这个问题，提供了一个关键字就代表父类的引用：super

        this与super的区别：（面试题）
            1、this代表的是当前对象的引用
            2、super代表的是父类存储空间的标识（可以操作父类中的成员）
            3、super在一个类中只能代表直接父类的引用，不能跨层引用


       要想初始化子类，就必须先初始化父类。
       super、this关键如何使用呢？
            1、调用成员变量呢？
                super.成员变量 调用的是直接父类中的成员变量
                this.成员变量  调用的时候本类中的成员变量
            2、访问构造方法
                this(...)  访问本类中的构造方法
                super(...) 访问直接父类中的构造方法
            3、访问成员方法
                this.成员方法名(..) 调用本类中的成员方法
                super.成员方法名(...) 调用直接父类中的成员方法

 */
class GrandFather4{
    int num2 = 1000;
}

class Father4 extends GrandFather4{
    int num2 = 200;

    Father4(){
        System.out.println("这是父类中的无参构造方法");
    }

    public void show(){
        int num2 = 700;
    }

}

class Son4 extends Father4{
    //    int num3 = 400;
    int num2 = 500;
    public void fun(){
        int num2 = 600;
//        System.out.println(num3);
//        show();
        System.out.println(num2); //输出的子类的局部变量num2
        System.out.println(this.num2);    //输出的子类的成员变量num2
        System.out.println(super.num2);   //输出的父类的成员变量num2
//        System.out.println();
    }
}
public class ExtendsDemo6 {
    public static void main(String[] args) {
        Son4 s = new Son4();
        s.fun();
    }
}
